#pragma once

#undef min
#undef max

#include <math/math.hpp>
#include <math/geometry.hpp>
#include <math/physics.hpp>
#include <math/types.hpp>




// Those types are required for the graphics hardware and cannot be
// independent on the floating-point type
typedef math::rectangle<int32>     rect;
typedef math::vector2<int32>       int2;
typedef math::size2<int32>         intsize2;
typedef math::vector4<int32>       int4;
typedef math::vector4<uint32>      uint4;
typedef math::vector2<float>       float2;
typedef math::size2<float>         floatsize2;
typedef math::vector3<float>       float3;
typedef math::vector4<float>       float4;
typedef math::matrix2x2<float>     float2x2;
typedef math::matrix3x3<float>     float3x3;
typedef math::matrix4x4<float>     float4x4;

// The next types are required for the physics device, their floating
// point type may change in the future
typedef math::types<float>   types;
typedef types::float_t       float_t;
typedef types::vector2       vector2;
typedef types::vector3       vector3;
typedef types::vector4       vector4;
typedef types::quaternion    quaternion;
typedef types::matrix2x2     matrix2x2;
typedef types::matrix3x3     matrix3x3;
typedef types::matrix4x4     matrix4x4;
typedef types::line          line;
typedef types::ray           ray;
typedef types::triangle      triangle;
typedef types::plane         plane;
typedef types::quad          quad;
typedef types::sphere        sphere;
typedef types::aabb          aabb;
typedef types::obb           obb;
typedef types::angle         angle;
